/**
 * 简单测试脚本 - 展示数据库连接和数据结构
 */

import dotenv from 'dotenv';
import mongoose from 'mongoose';
import { Book } from '../models/book.model';

dotenv.config();

const MONGODB_URI = process.env.MONGODB_URI || 'mongodb://localhost:27017/library_system';

async function simpleTest() {
  console.log('\n' + '='.repeat(60));
  console.log('📚 图书管理系统 - 数据库连接测试');
  console.log('='.repeat(60) + '\n');

  console.log('📌 连接信息:');
  console.log(`   数据库地址: ${MONGODB_URI}`);
  console.log(`   数据库名称: library_system`);
  console.log(`   测试时间: ${new Date().toLocaleString('zh-CN')}\n`);

  try {
    console.log('🔄 正在连接 MongoDB...');
    
    await mongoose.connect(MONGODB_URI, {
      serverSelectionTimeoutMS: 5000,
    });

    console.log('✅ 数据库连接成功!\n');

    // 获取数据库信息
    const db = mongoose.connection.db;
    const collections = await db?.listCollections().toArray();
    
    console.log('📊 数据库信息:');
    console.log(`   集合数量: ${collections?.length || 0}`);
    
    // 检查 books 集合
    const hasBooks = collections?.some(c => c.name === 'books');
    console.log(`   books 集合: ${hasBooks ? '已存在' : '未创建'}\n`);

    // 查询图书数据
    const bookCount = await Book.countDocuments();
    console.log('📚 图书数据:');
    console.log(`   图书总数: ${bookCount} 本\n`);

    if (bookCount === 0) {
      console.log('💡 数据库为空，创建示例数据...\n');
      
      const sampleBooks = [
        {
          title: 'Node.js 实战',
          author: '张三',
          publishDate: new Date('2023-01-01'),
          price: 99.99,
          isbn: '9787111234567',
          publisher: '电子工业出版社',
          category: '编程技术',
          description: '深入浅出讲解 Node.js 开发技术',
          stock: 100,
        },
        {
          title: 'JavaScript 高级程序设计',
          author: '李四',
          publishDate: new Date('2023-06-15'),
          price: 128.00,
          isbn: '9787115456789',
          publisher: '人民邮电出版社',
          category: '编程技术',
          description: 'JavaScript 权威指南',
          stock: 50,
        },
        {
          title: 'Python 编程入门',
          author: '王五',
          publishDate: new Date('2023-03-20'),
          price: 79.00,
          category: '编程技术',
          stock: 80,
        },
      ];

      await Book.insertMany(sampleBooks);
      console.log(`✅ 成功创建 ${sampleBooks.length} 条示例数据\n`);
    }

    // 显示图书列表
    const books = await Book.find().limit(5).lean();
    
    console.log('📖 图书列表:');
    console.log('─'.repeat(60));
    
    books.forEach((book: any, index: number) => {
      console.log(`\n[${index + 1}] ${book.title}`);
      console.log(`    作者: ${book.author}`);
      console.log(`    价格: ¥${book.price.toFixed(2)}`);
      console.log(`    ISBN: ${book.isbn || '无'}`);
      console.log(`    库存: ${book.stock || 0} 本`);
    });

    console.log('\n' + '─'.repeat(60));
    
    // 统计信息
    const stats = await Book.aggregate([
      {
        $group: {
          _id: null,
          totalBooks: { $sum: 1 },
          avgPrice: { $avg: '$price' },
          totalValue: { $sum: { $multiply: ['$price', '$stock'] } },
        },
      },
    ]);

    if (stats.length > 0) {
      console.log('\n📊 统计信息:');
      console.log(`   总图书数: ${stats[0].totalBooks} 本`);
      console.log(`   平均价格: ¥${stats[0].avgPrice.toFixed(2)}`);
      console.log(`   总价值: ¥${stats[0].totalValue.toFixed(2)}\n`);
    }

    console.log('✅ 测试完成!\n');
    console.log('💡 下一步:');
    console.log('   1. 启动 API 服务: npm run dev');
    console.log('   2. 访问 http://localhost:3000/api/books');
    console.log('   3. 使用 Postman 测试 API\n');

  } catch (error) {
    console.log('❌ 连接失败!\n');
    console.log('错误信息:', error instanceof Error ? error.message : error);
    console.log('\n💡 解决方案:');
    console.log('   方案 1: 使用 MongoDB Atlas (推荐)');
    console.log('          访问 https://www.mongodb.com/cloud/atlas');
    console.log('          注册免费账号并创建集群');
    console.log('          更新 .env 文件中的 MONGODB_URI\n');
    console.log('   方案 2: 安装本地 MongoDB');
    console.log('          下载: https://www.mongodb.com/try/download/community');
    console.log('          安装并启动服务\n');
    console.log('   方案 3: 使用 Docker');
    console.log('          docker run -d -p 27017:27017 mongo\n');
  } finally {
    await mongoose.disconnect();
    console.log('👋 数据库连接已关闭\n');
    process.exit(0);
  }
}

// 运行测试
simpleTest();
